<?php
//定义接口
interface LoggerInterface {
    public function log($message);
}

// 具体的日志实现类
class FileLogger implements LoggerInterface {
    public function log($message) {
        $file = fopen('log.txt', 'a');
        fwrite($file, $message. "\n");
        fclose($file);
    }
}

//业务类
class UserService
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function registerUser($username) {
        // 业务逻辑
        $this->logger->log("用户 $username 注册");
    }
}

//创建日志对象
$logger = new FileLogger();
$user = new UserService($logger);
$user->registerUser('hello');

/*
 * 依赖注入容器
 解耦模块：使不同的模块之间通过依赖注入来建立联系，而不是在模块内部直接创建依赖对象，增强了模块的独立性和可复用性。
 管理复杂的依赖关系：当一个类有多个依赖，或者依赖的创建和配置比较复杂时，通过依赖注入可以更清晰地管理这些依赖。
 案例：依赖注入容器
 */